from PyQt5.QtWidgets import QWidget,QPushButton,QApplication,QGridLayout,QLabel
from PyQt5.QtCore import QTimer,QDateTime
import sys

class ShowTime(QWidget):
    #初始化函数固定格式
    def __init__(self,parent=None):
        super(ShowTime,self).__init__(parent)
        #初始化结束
        self.setWindowTitle("动态显示当前时间")
        #窗口上放置一个label
        self.label=QLabel("显示当前时间")
        self.startBtn=QPushButton("开始")
        self.endBtn=QPushButton("结束")
        layout=QGridLayout() #网格布局
        layout.addWidget(self.startBtn) #把小部件放入网格布局

        #创建定时器
        self.timer=QTimer()
        #定时器的timeout信号连接到一个槽函数showTime
        self.timer.timeout.connect(self.showTime)

        '''
        布局方式有bug，错乱
        '''
        # QGridLayout是网格布局 添加小部件 label标签
        layout.addWidget(self.label,0,0,1,1) #坐标（0，0）的组件占用一行两列
        layout.addWidget(self.startBtn,2,2)
        layout.addWidget(self.endBtn,3,2)

        '''
        信号📶函数
        '''
        #开始按钮点击后绑定到一个槽函数startTimer()
        self.startBtn.clicked.connect(self.startTimer)
        #结束按钮点击后绑定到槽函数endTimer()
        self.endBtn.clicked.connect(self.endTimer)

        #把布局部件设置到窗口布局中
        self.setLayout(layout)

    def showTime(self):
        #获取当前时间
        time=QDateTime.currentDateTime()
        #字符串格式化
        timeDisplay=time.toString("yyyy-MM-dd hh:mm:ss")
        #把格式化后的文本设置到label标签上
        self.label.setText(timeDisplay)
#============================================================
    '''
    槽函数
    '''
    #定义槽函数startTimer
    def startTimer(self):
        #定时器每隔1000毫秒开始一次
        self.timer.start(1000)
        #把开始按钮变成不可用状态 false
        self.startBtn.setEnabled(False)
        # 把结束按钮变成可用状态 true
        self.endBtn.setEnabled(True)


    # 定义槽函数endTimer
    def endTimer(self):
        self.timer.stop()
        self.startBtn.setEnabled(True)
        self.endBtn.setEnabled(False)

if __name__ == '__main__':
    app=QApplication(sys.argv)
    form=ShowTime()
    form.show()
    sys.exit(app.exec())